<?php
class Item extends UDEntity {
	
	protected $cod_item_auto;
	protected $cod_categoria_auto;
	protected $cod_empresa_auto;
	//protected $cod_item;
	protected $desc_item;
	protected $item_indisponivel;
	protected $obs;
	protected $foto;

	protected $tamanhosItem 	= NULL;
	protected $ingredientesItem = NULL;
	protected $fotosItem 		= NULL;

	public function __construct($id = ''){
		parent::__construct();

		$this->cod_item_auto 		= '';
		$this->cod_categoria_auto 	= '';
		$this->cod_empresa_auto 	= '';
		$this->desc_item 			= '';
		$this->item_indisponivel 	= 0;
		$this->obs 					= '';
		$this->foto  				= '';

		if(!empty($id)){
			$this->carregar($id);
		}
	}

	public function getFotos(){
		$fotos = array();

		//TODO
		// 

		return $fotos;
	}

	public function getIngredientes($refresh = FALSE){
		if($this->hasID()){

			if(is_null($this->ingredientesItem) || $refresh){
				$this->ingredientesItem = array();

				$this->CI->db->where('cod_item_auto', $this->cod_item_auto);

				$query = $this->CI->db->get('ingrediente_item');

				foreach($query->result() as $r){
					$ingreItem = new Ingrediente_item($r->cod_ingre_item_auto);
					$this->addIngreItem($ingreItem);
				}
			}
		}else{
			$this->ingredientesItem = array();
		}

		return $this->ingredientesItem;
	}

	public function addIngreItem($ingreItem){
		if(is_null($this->ingredientesItem)){
			$this->ingredientesItem = array();
		}

		array_push($this->ingredientesItem, $ingreItem);
	}

	public function addTamItem($tamItem){
		if(is_null($this->tamanhosItem)){
			$this->tamanhosItem = array();
		}

		array_push($this->tamanhosItem, $tamItem);
	}

	public function getTamanhos($refresh = FALSE){

		if($this->hasID()){

			if(is_null($this->tamanhosItem) || $refresh){
				$this->tamanhosItem = array();

				$this->CI->db->where('cod_item_auto', $this->cod_item_auto);
				$this->CI->db->order_by('preco_item', 'asc');
				$query = $this->CI->db->get('tamanho_item');

				foreach($query->result() as $r){
					$tamIt = new Tamanho_item($r->cod_tam_item_auto);
					$this->addTamItem($tamIt);
				}
			}

		}else{
			$this->tamanhosItem = array();
		}

		return $this->tamanhosItem;
	}

	//
	// Métodos próprios
	//
	public function hasID(){
		return !empty($this->cod_item_auto) && $this->cod_item_auto > 0;
	}

	//
	// Implementação métodos abstratos
	//

	public function carregar($id){
		$this->CI->db->where('cod_item_auto', $id);
		$query = $this->CI->db->get('item');

		if($query && $query->num_rows() == 1) {
			foreach ($query->result() as $itm) {
				$this->cod_item_auto		= $itm->cod_item_auto;
				$this->cod_categoria_auto 	= $itm->cod_categoria_auto;
				$this->cod_empresa_auto 	= $itm->cod_empresa_auto;
				$this->desc_item			= $itm->desc_item;
				$this->item_indisponivel	= $itm->item_indisponivel;
				$this->obs 					= $itm->obs;
			}
		}

		// Carrega fotos
		$this->CI->db->where('cod_item_auto', $id);
		$query = $this->CI->db->get('foto_item');

		if($query && $query->num_rows() > 0) {
			foreach($query->result() as $row){
				$this->foto = $row->caminho_foto;
			}
		}
	}

	public function gravar(){
		$validacao = $this->validar();
		
		if ($validacao[0]){
			if($this->hasID()){
				//Update
				$data = array(
					'cod_categoria_auto' => $this->getCodCategoria(),
					'desc_item' 		 => $this->getDescItem(),
					'item_indisponivel'  => $this->getItemIndisponivel(),
					'obs'				 => $this->getObs()
					);

				$this->CI->db->where('cod_item_auto', $this->cod_item_auto);
				$this->CI->db->update('item', $data);
			}else{
				//Insert
				$data = array(
					'cod_categoria_auto' => $this->getCodCategoria(),
					'cod_empresa_auto' 	 => $this->getCodEmpresa(),
					'desc_item' 		 => $this->getDescItem(),
					'item_indisponivel'  => $this->getItemIndisponivel(),
					'obs' 				 => $this->getObs()
					);

				$query = $this->CI->db->insert('item', $data);
				$this->cod_item_auto = $this->CI->db->insert_id();
			}			

			foreach($this->getTamanhos() as $tam){
				$tam->setCodItem($this->cod_item_auto);
				$tam->gravar();
			}

			$this->CI->db->where('cod_item_auto', $this->cod_item_auto);
			$this->CI->db->delete('ingrediente_item');

			if( is_array($this->ingredientesItem) ){
				foreach($this->ingredientesItem as $ingreItem){
					$ingreItem->clearCodTamanhoItemAuto();
					$ingreItem->setCodItem($this->cod_item_auto);
					$validacao  = $ingreItem->gravar();
				}
			}

			$this->CI->db->where('cod_item_auto', $this->cod_item_auto);
			$this->CI->db->delete('foto_item');

			if( ! empty($this->foto)){
				$data = array(
					'cod_item_auto' => $this->cod_item_auto,
					'cod_foto'	    => '',
					'caminho_foto'  => $this->foto,
					'nome_foto'		=> $this->desc_item
				);

				$this->CI->db->insert('foto_item', $data);
			}

		}	


		return $validacao;
	}

	public function validar(){
		$validacao = array(true,'');

		if($this->hasID()){
			//update
			if(empty($this->desc_item)){
				$validacao = array(false, 'Informe a descrição do item.');
			}else{
				$this->CI->db->from('item');
				$this->CI->db->where('desc_item', $this->getDescItem());
				$this->CI->db->where('cod_empresa_auto', $this->getCodEmpresa());
				$this->CI->db->where('cod_categoria_auto', $this->getCodCategoria());
				$this->CI->db->where('item_indisponivel', 0);
				$this->CI->db->where('cod_item_auto !=', $this->cod_item_auto);

				if($this->CI->db->count_all_results() > 0){
					$validacao = array(false, 'Item "' . $this->getDescItem() . '"" já cadastrado nesta categoria.');
				}	
			}
		}else{
			//insert
			if(empty($this->desc_item)){
				$validacao = array(false, 'Informe a descrição do item.');
			}else{
				$this->CI->db->from('item');
				$this->CI->db->where('desc_item', $this->getDescItem());
				$this->CI->db->where('cod_empresa_auto', $this->getCodEmpresa());
				$this->CI->db->where('cod_categoria_auto', $this->getCodCategoria());
				$this->CI->db->where('item_indisponivel', 0);

				if($this->CI->db->count_all_results() > 0){
					$validacao = array(false, 'Item "' . $this->getDescItem() . '"" já cadastrado nesta categoria.');
				}	
			}
		}

		return $validacao;
	}	


	//
	// Getters e Setters
	//
	public function getCodItem(){
		return $this->cod_item_auto;
	}

	public function getCodCategoria(){
		return $this->cod_categoria_auto;
	}

	public function setCodCategoria($codCategoria){
		$this->cod_categoria_auto = $codCategoria;
	}	
	
	public function setCodEmpresa($codEmpresa){
		$this->cod_empresa_auto = $codEmpresa;
	}

	public function getCodEmpresa(){
		return $this->cod_empresa_auto;
	}

	public function setDescItem($descItem){
		$this->desc_item = $descItem;
	}

	public function getDescItem(){
		return $this->desc_item;
	}

	public function setObs($obs){
		$this->obs = $obs;
	}

	public function getObs(){
		return $this->obs;
	}

	public function setItemIndisponivel($itemIndisponivel){
		$this->item_indisponivel = $itemIndisponivel > 0 ? 1 : 0;
	}

	public function getItemIndisponivel(){
		return $this->item_indisponivel;
	}

	public function getFoto(){
		return $this->foto;
	}

	public function setFoto($nome_arquivo){
		$this->foto = $nome_arquivo;
	}

}